Python数据结构和类型
1.1 解压序列赋值给多个变量
现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量?
解决思路:先通过简单的解压赋值给多个变量,前提是变量的数量和序列元素的数量是一致的
下面是简单的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| p = (1,2,3) x,y,y = p >>>x ---1 >>>y---2 >>>z---3 **代码实现1** data = [ 'ABC',20,30.11,(16,28,99) ] name,share,price,hello = data >>>name 'ABC' >>>share 20 >>>price 30.11 >>>date (16,28,39) **代码实现2** data = [ 'ABC',20,30.11,(16,28,99) ] name,share,price,(one,two,three)= data >>>name 'ABC' >>>one 16 >>>two 28 >>>three 99
|
如果变量个数和元素的个数不匹配,就会出现错误
1 2 3 4 5
| >>>p = ( 4,5) x,y,z = p ValueError: not enough values to unpack (expected 3, got 2)
|
这种解压赋值适合任何迭代对象,字符串,。。。。
1 2 3 4 5 6 7 8 9 10 11 12
| >>> a,b,c,d,e = p >>> a 'h' >>> b 'e' >>> c 'l' >>> d 'l' >>> e 'o' >>>
|
如果想要解压一部分,丢弃其他值,只需要通过任意变量进行占位,最后将这些变量丢弃即可
1 2 3 4 5 6
| data = [ 'ABC',20,30.11,(16,28,99) ] _,share,price,_ = date >>>share 20 >>>price 30.11
|
在测试中发现,输入丢弃变量的_的时候,显示的值是(16,28,99)
1.2 解压可迭代对象赋值给多个变量
问题
如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError 。 那么怎样才能从这个可迭代对象中解压出N个元素出来?
解决方案
Python的星号表达式可以用来解决这个问题
http://blog.csdn.net/liuxingen/article/details/50113923
函数参数前面的星号(*)
1 2 3 4 5 6 7 8 9 10
| >>> recore = ('hh','abdf@163.com','1223-456-456','456789-123-456') >>> name, email,*numbers = recore >>> name 'hh' >>> email 'abdf@163.com' >>> numbers ['1223-456-456', '456789-123-456'] >>> print(type(numbers)) <class 'list'>
|
值得注意的是上面解压出的numbers 变量永远都是列表类型,不管解压的电话号码数量是多少(包括0个)。 所以,任何使用到 numbers 变量的代码就不需要做多余的类型检查去确认它是否是列表类型了。
1.3 字典也是可以解压的
对于字典类型的解压,解压出来的是字典的key,例如:
1 2 3 4 5
| a,b ={“name”:"hh","age":123} >>>a name >>>b age
|